package com.gitee.qdbp.general.common.api.reusable.basic;

import java.util.List;
import com.gitee.qdbp.able.exception.ServiceException;
import com.gitee.qdbp.able.jdbc.ordering.OrderPaging;
import com.gitee.qdbp.able.jdbc.paging.PageList;
import com.gitee.qdbp.general.common.api.reusable.model.SimpleTreeBean;
import com.gitee.qdbp.general.common.api.reusable.model.SimpleTreeUpdate;
import com.gitee.qdbp.general.common.api.reusable.model.SimpleTreeWhere;

public interface ISimpleTreeBasic {

    /**
     * 基础树形数据查询
     *
     * @param where 查询条件
     * @return 基础树形数据
     * @throws ServiceException 查询失败
     */
    SimpleTreeBean find(SimpleTreeWhere where) throws ServiceException;

    /**
     * 根据主键查询基础树形数据
     *
     * @param id 主键
     * @return 基础树形数据
     * @throws ServiceException 查询失败
     */
    SimpleTreeBean findById(String id) throws ServiceException;

    /**
     * 根据节点编号查询基础树形数据
     *
     * @param nodeCode 节点编号
     * @return 基础树形数据
     * @throws ServiceException 查询失败
     */
    SimpleTreeBean findByNodeCode(String nodeCode) throws ServiceException;

    /**
     * 基础树形数据查询
     *
     * @param paging 排序分页条件
     * @return 基础树形数据列表
     * @throws ServiceException 查询失败
     */
    PageList<SimpleTreeBean> list(OrderPaging paging) throws ServiceException;

    /**
     * 基础树形数据查询
     *
     * @param where 查询条件
     * @param paging 排序分页条件
     * @return 基础树形数据列表
     * @throws ServiceException 查询失败
     */
    PageList<SimpleTreeBean> list(SimpleTreeWhere where, OrderPaging paging) throws ServiceException;

    /**
     * 根据主键查询基础树形数据列表
     *
     * @param ids 主键列表
     * @return 基础树形数据列表
     * @throws ServiceException 查询失败
     */
    PageList<SimpleTreeBean> listByIds(List<String> ids) throws ServiceException;

    /**
     * 根据节点编号查询基础树形数据列表
     *
     * @param nodeCodes 节点编号列表
     * @return 基础树形数据列表
     * @throws ServiceException 查询失败
     */
    PageList<SimpleTreeBean> listByCodes(List<String> nodeCodes) throws ServiceException;

    /**
     * 创建基础树形数据
     *
     * @param model 待新增的基础树形数据
     * @return 受影响行数
     * @throws ServiceException 创建失败
     */
    int create(SimpleTreeBean model) throws ServiceException;

    /**
     * 批量创建基础树形数据
     *
     * @param models 待新增的基础树形数据
     * @return 受影响行数
     * @throws ServiceException 创建失败
     */
    int create(List<SimpleTreeBean> models) throws ServiceException;

    /**
     * 修改基础树形数据
     *
     * @param model 待修改的内容
     * @param errorOnUnaffected 受影响行数为0时是否抛异常
     * @return 受影响行数
     * @throws ServiceException 修改失败
     */
    int update(SimpleTreeUpdate model, boolean errorOnUnaffected) throws ServiceException;

    /**
     * 根据主键删除基础树形数据
     *
     * @param ids 待删除的基础树形数据的主键
     * @param errorOnRowsNotMatch 删除行数不匹配时是否抛异常
     * @return 删除行数
     * @throws ServiceException 删除失败
     */
    int deleteByIds(List<String> ids, boolean errorOnRowsNotMatch) throws ServiceException;

    /**
     * 根据节点编号删除基础树形数据
     *
     * @param nodeCodes 待删除的节点编号
     * @param errorOnRowsNotMatch 删除行数不匹配时是否抛异常
     * @return 删除行数
     * @throws ServiceException 删除失败
     */
    int deleteByCodes(List<String> nodeCodes, boolean errorOnRowsNotMatch) throws ServiceException;

    /**
     * 根据条件删除基础树形数据
     *
     * @param where 条件
     * @param errorOnUnaffected 删除行数为0时是否抛异常
     * @return 删除行数
     * @throws ServiceException 删除失败
     */
    int delete(SimpleTreeWhere where, boolean errorOnUnaffected) throws ServiceException;

}
